[Chapter 29] 29.3 The Sequence of Rule Sets
Author: Bryan Costales & Eric Allman
Date: 1999-01-06T19:51:17Z

#

| Chapter 29 Rule Sets |

## 29.3 The Sequence of Rule Sets

When sendmail rewrites addresses, it applies its rule sets in a specific sequence. The sequence differs for sender and recipient addresses, with a third branch used to select delivery agents. Figure 29.1 shows a map of the different paths taken by each kind of address. Those paths show how addresses flow through rule sets.

Both sender and recipient addresses are first input into rule set 3. Then each takes a different path through the rule sets based on its type. Recipient addresses take the dashed path, whereas sender addresses take the solid path. But before those paths can be taken, sendmail needs to select a delivery agent (the dotted path) to get rule-set numbers for the `R=` and `S=` of each path.

#### Figure 29.1: The flow of rules through rule sets

To select a delivery agent, sendmail rewrites the recipient address with rule sets 3 and 0 (the dotted path). Rule set 0 selects a delivery agent that is appropriate for the recipient. That delivery agent supplies rule set values for the `S=` and `R=` in the corresponding sender (solid) and recipient (dashed) paths.

After a delivery agent has been selected, the sender address is processed (see Figure 29.2). As was mentioned above, it is first input into rule set 3. Then it flows through rule set 1, then the `S=` rule set as determined by the delivery agent. Finally, it flows through rule set 4, which returns the rewritten address. This rewritten sender address appears in the header and envelope of the mail message.

#### Figure 29.2: The flow of sender addresses through rule sets

Note that all addresses are eventually rewritten by rule set 4. In general, rule set 4 undoes any special rewriting that rule set 3 did.

Finally, the recipient address also needs to be rewritten for inclusion in the header and envelope of mail messages (see Figure 29.3). Recall that it was already used once to select the delivery agent. It is used as input to rule set 3, as are all addresses. It then flows through rule set 2, then through the `R=` rule set selected by the delivery agent, and finally through rule set 4.

#### Figure 29.3: The flow of recipient addresses through rule sets

The need for separate paths for the sender and the recipient is best explained with an example. Consider a site that wants the addresses of all local users to appear as though they are from the local domain. Such rewriting is appropriate for local users on outgoing mail but inappropriate for recipients at other sites. Clearly, such rewriting should be restricted to the sender path, probably in rule set 1.

The flow of rules through rule sets (as is shown in Figure 29.3) is appropriate for all versions of sendmail. Some versions, such as V8, enhance these rules with others, but all those enhancements begin with this basic set.

### 29.3.1 V8 Enhancements

V8 sendmail allows envelope addresses to be rewritten separately from header addresses. This separation takes place in the delivery agent `R=` and `S=` specific rule sets as illustrated in Figure 29.4.

#### Figure 29.4: V8 splits rewriting: envelope (solid) versus header (dashed)

The method that is used to split rewriting looks like this:

>     R=eset/hset           beginning with V8
>     S=eset/hset           beginning with V8

The envelope-specific rule set is the one to the left of the slash and is represented by a solid line. The header-specific rule set is to the right of the slash (`R=eset/hset`) and is represented by a dashed line. See Section 30.4.10, R= for a complete description of this process.

29.2 Rule Sets and m4 |  | 29.4 Rule Set 3